// 5. 逆序迭代器
// 迭代器模式 - 具体迭代器类（逆序）
// 实现了IIterator接口的逆序迭代器
// 用于反向遍历MyList集合中的元素
public class ReverseListIterator<T> : IIterator<T>
{
  // 对要遍历的聚合对象的引用
  private readonly MyList<T> _list;

  // 当前迭代位置的索引
  // 逆序迭代时，初始值设为最后一个元素的索引
  private int _currentIndex;

  // 构造函数
  // 参数: list - 要遍历的聚合对象
  // 初始化：将索引设置为集合的最后一个元素位置
  public ReverseListIterator(MyList<T> list)
  {
    _list = list;
    _currentIndex = _list.Count - 1;  // 从最后一个元素开始
  }

  // 获取当前位置的元素
  // 如果当前索引有效（>=0），则返回对应元素；否则返回默认值
  public T Current
      => _currentIndex >= 0 ? _list.GetItem(_currentIndex) : default;

  // 移动到下一个元素（逆序）
  // 实现逻辑：索引减1，然后检查是否还有更多元素
  // 返回值: 如果成功移动到下一个元素则返回true，否则返回false
  public bool MoveNext()
  {
    _currentIndex--;
    return _currentIndex >= 0;
  }

  // 重置迭代器到初始位置（逆序）
  // 将索引重置为集合的最后一个元素位置，准备重新反向遍历
  public void Reset() => _currentIndex = _list.Count - 1;
}